/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 周斌
 * Date: 2023-11-08
 * Time: 21:33
 */
class PetDog {
    private String name;//名字
    private int age;//年龄
    private String colour;//颜色
    public static String dogRoom;//狗窝
    //用static关键字修饰的成员变量，不属于任何一个对像，而是属于该类，被称为类变量，该变量存储在方法区。
    //既可以通过对象访问，也可以通过类名访问，但一般更推荐使用类名访问
   /* public String name;//名字
    public int age;//年龄
    public String colour;//颜色
    public static String dogRoom;//狗窝*/
    //属性 字段 成员变量
   /* public String name;//名字
    public int age;//年龄
    public String colour;//颜色*/
    //用修饰符private来进行封装
    //封装是将代码实现细节隐藏起来，用户无法直接在这个类之外调用这个已经封装过的成员变量，只能通过调用方法间接的去修改成员变量
    /*private String name;//名字
    private int age;//年龄
    private String colour;//颜色*/
    //静态成员方法
    public static void sleep() {
        System.out.println("正在"+PetDog.dogRoom+"狗窝"+"睡觉");
    }
    //成员方法
    /*public void eat() {
        System.out.println(this.name+"正在吃东西......");
    }

    public void wag () {
        System.out.println(this.name+"正在摇尾巴......");
    }

    public void barks () {
        System.out.println(this.name+"正在汪汪汪......");
    }*/
    //通过快捷键Alt+insert可以快速创建可以通过这些间接改变已经被封装的成员变量  setName()是修改名字也叫重新设置名字   getName() 得到这个修改的名字
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getColour() {
        return colour;
    }

    public void setColour(String colour) {
        this.colour = colour;
    }

    //这是自定义一个初始化方法
    /*public void init(String name,int age,String colour ) {
        this.name = name;
        this.age = age;
        this.colour = colour;
    }*/
    //打印方法
    public void print() {
        System.out.println("狗名:"+this.name +" "+"狗的年龄:"+this.age+" "+"狗的颜色:"+this.colour+" "+"狗窝:"+PetDog.dogRoom);
    }
    //构造方法  构造方法不同于其他自定义方法没有返回值，构造方法的方法名必须要和类名相同，只会被调用一次，可以用来初始化成员变量的值。
    //构造方法可以重载，可以通过this()调用其他构造方法, 在通过this()调用其他构造方法时必须要把this()放在第一行
    public PetDog() {
        this("旺财",2,"黑色");
        //System.out.println("无参的代码运行了");
    }
    public  PetDog(String name,int age, String colour) {
        this.name = name;
        this.age = age;
        this.colour = colour;
        //System.out.println("带参的代码运行了");
    }

}
public class Test {
    //类与对象
    public static void main(String[] args) {
        //将对象实例化
    PetDog petDog1 = new PetDog();
    PetDog.dogRoom = "666";
    petDog1.setName("小黄");
    petDog1.setAge(3);
    petDog1.setColour("黄色");
    System.out.println("狗名:"+petDog1.getName() +" "+"狗的年龄:"+petDog1.getAge()+" "+"狗的颜色:"+petDog1.getColour()+" "+"狗窝"+PetDog.dogRoom);
    //PetDog petDog2 = new PetDog("小黄",3,"黄色");
    //将PetDog中的成员变量初始化
       /* petDog1.init("旺财",2,"黑色");
        petDog2.init("小黄",3,"黄色");
*/
        /*petDog.name = "旺财";
        petDog.age = 2;
        petDog.colour = "黑色";*/
       /* System.out.println("狗名:"+petDog1.name +" "+"狗的年龄:"+petDog1.age+" "+"狗的颜色:"+petDog1.colour+" "+"狗窝:"+PetDog.dogRoom);
        System.out.println("狗名:"+petDog2.name +" "+"狗的年龄:"+petDog2.age+" "+"狗的颜色:"+petDog2.colour+" "+"狗窝:"+PetDog.dogRoom);*/
       /* petDog1.print();
        petDog2.print();*/
        /*petDog1.eat();
        petDog1.wag();
        petDog1.barks();*/
       /* petDog2.eat();
        petDog2.wag();
        petDog2.barks();*/
        PetDog.sleep();
    }
}
